有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是否可以在TestNG dataprovider类中注入变量

我有一个测试类和一个单独的数据提供程序类,如下所示。我的测试类扩展了AbstractTestNGSpringContextTests,所以我可以在测试类中注入变量。但当我尝试在数据提供程序类中注入变量时,它不起作用。(我甚至尝试用AbstractTestNGSpringContextTests扩展它)。在调试时,我可以看到只有在实例化测试类时才会发生自动连接

@Test(dataProviderClass = MyDataProvider.class)
public class MyTest extends AbstractTestNGSpringContextTests{

    @Inject
    XYZ x; //works
    
    @Test(dataProvider = "dataSet1")
    public void testMethod1(){
        //
    }
}
public class MyDataProvider {

    @Inject
    XYZ x;// not working
    
    @DataProvider
    public Object[][] dataSet1(){
        //
    }
}

然后我试图通过将属性设置为ITestContext

@Test(dataProviderClass = MyDataProvider.class)
public class MyTest extends AbstractTestNGSpringContextTests{

    @Inject
    XYZ x; 


    @BeforeClass
    public void beforeClass(ITestContext context){
        context.setAttribute("x",x);
    }
    
    @Test(dataProvider = "dataSet1")
    public void testMethod1(){
        //
    }
}
public class MyDataProvider {
   
    @DataProvider
    public Object[][] dataSet1(ITestContext context){
        XYZ x = (XYZ) context.getAttribute("x");
    }
}

尽管上面的方法可以工作,但它看起来像是一种变通方法,而且我还需要向每个数据提供程序方法添加ITestContext参数

所以,我想知道

  1. 是否可以在数据提供程序类内部进行注入
  2. 有更好的方法吗?(与before类方法类似,是否有任何before方法可用于数据提供程序,以便我不需要将ITestContext传递给每个数据提供程序方法)

共 (0) 个答案